﻿using System;
using System.Collections.Generic;
using System.Linq;
using Zadani09.db.DAO;

namespace Zadani09.db.DAOimpl
{
    public class VystavaDAOmysql : AbstractDAO,IVystavaDAO
    {

        public void create(Vystava vystava)
        {
            initiateConnection();

            db.Vystava.InsertOnSubmit(vystava);
            db.SubmitChanges();

            closeConnection();
        }

        public Vystava load(string id)
        {
            initiateConnection();

            uint idv = uint.Parse(id);

            var result = from v in db.Vystava
                         where v.IDVystava == idv
                         select new Vystava() { 
                         
                         IDVystava = v.IDVystava,
                         IDGalerie = v.IDGalerie,
                         Jmeno = v.Jmeno,
                         Popis = v.Popis,
                         DlouhyPopis = v.DlouhyPopis,
                         Vernisaz = v.Vernisaz,
                         Zacatek = v.Zacatek,
                         Konec = v.Konec,
                         OteviraciDoba = v.OteviraciDoba,
                         CenaVstupenkyDeti = v.CenaVstupenkyDeti,
                         CenaVstupenkyDospeli = v.CenaVstupenkyDospeli,
                         Stav = v.Stav,
                         
                         };

        closeConnection();

        Vystava nahranaVystava = null;

        List<Vystava> list = new List<Vystava>();

        foreach (var item in result)
        {
            list.Add(item);
        }


        if (list.Count > 1 || list.Count < 1)
        {
            //throw exeption nejakou...
            nahranaVystava = null;
        }
        else
        {
            nahranaVystava = list.First<Vystava>();
        }

        return nahranaVystava;
        }

      
        public void delete(Vystava vystava)
        {
            initiateConnection();

            db.Vystava.Attach(vystava);
            db.Vystava.DeleteOnSubmit(vystava);
            db.SubmitChanges();

            closeConnection();
        }

        public void delete(string id)
        {
            Vystava vystava = new Vystava();
            vystava.IDVystava = uint.Parse(id);
            
            this.delete(vystava);
        }

      public void pridejDilo(VystavaDilo vystavaDilo)
        {
            initiateConnection();

            db.VystavaDilo.InsertOnSubmit(vystavaDilo);
            db.SubmitChanges();

            closeConnection();
        }


      public List<Vystava> nahrejListDnesnichVystav(DateTime dnesniDatum)
      {

          initiateConnection();

          //v dokumentaci - tabulka Exhibition - obsahuje dva atributy s datumem,
          //prvni z nich je Zacatek (start) a druhy je Vernissage(vernisaz)
          //co tim vernissage myslel vi buh, ja ne, nejsem umelec :D

          //navic je tu jista komplikace v porovnani datumu, protoze tady ten timeDate uchovava i cas

          int rok = dnesniDatum.Year;
          int den = dnesniDatum.Day;
          int mesic = dnesniDatum.Month;

          var result = from v in db.Vystava
                       where v.Zacatek.Year == rok && v.Zacatek.Month == mesic && v.Zacatek.Day == den
                       select v;
          closeConnection();

          List<Vystava> list = result.ToList<Vystava>();

          return list;

      }


      public void update(Vystava nova)
      {
          initiateConnection();

          uint id = nova.IDVystava;

          var updateQ = db.Vystava.First(e => e.IDVystava == id);

          //vystava zmenila zobrazovanou galerii
          updateQ.IDGalerie = nova.IDGalerie;
          //vystava se prestehovala..
          updateQ.Jmeno = nova.Jmeno;
          updateQ.OteviraciDoba = nova.OteviraciDoba;
          updateQ.Popis = nova.Popis;
          updateQ.Konec = nova.Konec;
          updateQ.DlouhyPopis = nova.DlouhyPopis;
          updateQ.Stav = nova.Stav;
          updateQ.CenaVstupenkyDeti = nova.CenaVstupenkyDeti;
          updateQ.CenaVstupenkyDospeli = nova.CenaVstupenkyDospeli;
          updateQ.Zacatek = nova.Zacatek;

          db.SubmitChanges();


          closeConnection();
      }


      public List<Vystava> loadList(int odkud, int kolik)
      {
          initiateConnection();

          var result = from u in db.Vystava select u;

          List<Vystava> list = result.ToList<Vystava>();

          closeConnection();

          return list;
      }


    }
}

